home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2004 #9 / Amiga Plus CD - 2004 - No. 09.iso / amigaplus / tools / amigaos4_only / ifxlite / imagefx3 / rexx / analyzejpeg.ifx next >
Text File  |  2004-08-03  |  3KB  |  224 lines

  1. /*
  2.  * $VER: AnalyzeJPEG 2.0.0 (22.7.94)
  3.  *
  4.  * Arexx program for the ImageFX image processing system.
  5.  * Written by Thomas Krehbiel
  6.  *
  7.  * Revised for ImageFX release 2.0.
  8.  *
  9.  * Analyze the compression vs. quality loss of JPEG on the image
  10.  * in the current buffer; draw a graph of the results into the
  11.  * swap buffer.
  12.  *
  13.  */
  14.  
  15. OPTIONS RESULTS
  16.  
  17. CALL ADDLIB('rexxsupport.library',0,-30,0)
  18.  
  19. startq = 25
  20. endq   = 100
  21.  
  22. GetMain
  23. IF result = "" THEN DO
  24.    /* 2.0: if no main buffer, ask for one */
  25.    LoadBuffer
  26.    IF rc ~= 0 THEN EXIT
  27.    GetMain
  28.    END
  29. PARSE VAR result name width height depth .
  30.  
  31. LockInput
  32. SetPrefs SaveNails Off
  33. prevnails = result
  34.  
  35. maxbytes = 0
  36.  
  37. /*
  38.  * Collect data
  39.  */
  40. DO i = startq TO endq BY 5
  41.  
  42.    Message 'JPEG Quality =' i
  43.  
  44.    SaveBufferAs JPEG 'RAM:Temp.JPG' i
  45.  
  46.    Swap
  47.    LoadBuffer 'RAM:Temp.JPG' NoSmooth
  48.    Swap
  49.  
  50.    Subtract
  51.    Hook 'Variance'
  52.    IF rc ~= 0 THEN EXIT
  53.  
  54.    PARSE VAR result vr.i vg.i vb.i
  55.  
  56.    vr.i = (vr.i + 50) % 100
  57.    vg.i = (vg.i + 50) % 100
  58.    vb.i = (vb.i + 50) % 100
  59.    avg.i = (vr.i + vg.i + vb.i) % 3
  60.  
  61.    f = STATEF('RAM:Temp.JPG')
  62.    bytes.i = WORD(f,2)
  63.    IF bytes.i > maxbytes THEN maxbytes = bytes.i
  64.  
  65.    Undo
  66.  
  67.    END
  68.  
  69. ADDRESS COMMAND 'Delete >NIL: RAM:Temp.JPG'
  70.  
  71. /*
  72.  * Now make a nifty-neato graph to show the data
  73.  */
  74. Swap
  75.  
  76. Redraw Off ; Undo Off
  77.  
  78. CreateBuffer 640 400 Force
  79. KillBrush
  80.  
  81. /*
  82.  * Fill in block of graph
  83.  */
  84. Blend 50
  85.  
  86. SetPalette '-1' 255 0 0
  87. NewArea
  88. AddArea (startq-22)*8 390
  89. DO i = startq TO endq BY 5
  90.    AddArea (i-22)*8 390-vr.i
  91.    END
  92. AddArea (endq-22)*8 390
  93. FilledPoly
  94.  
  95. SetPalette '-1' 0 255 0
  96. NewArea
  97. AddArea (startq-22)*8 390
  98. DO i = startq TO endq BY 5
  99.    AddArea (i-22)*8 390-vg.i
  100.    END
  101. AddArea (endq-22)*8 390
  102. FilledPoly
  103.  
  104. SetPalette '-1' 0 0 255
  105. NewArea
  106. AddArea (startq-22)*8 390
  107. DO i = startq TO endq BY 5
  108.    AddArea (i-22)*8 390-vb.i
  109.    END
  110. AddArea (endq-22)*8 390
  111. FilledPoly
  112.  
  113. SetPalette '-1' 96 96 96
  114. NewArea
  115. AddArea (startq-22)*8 390
  116. DO i = startq TO endq BY 5
  117.    AddArea (i-22)*8 390-avg.i
  118.    END
  119. AddArea (endq-22)*8 390
  120. FilledPoly
  121.  
  122. /*
  123.  * Line graph
  124.  */
  125. Blend 100
  126.  
  127. SetPalette '-1' 255 0 0
  128. NewArea
  129. DO i = startq TO endq BY 5
  130.    AddArea (i-22)*8 390-vr.i
  131.    END
  132. FreeLine
  133.  
  134. SetPalette '-1' 0 255 0
  135. NewArea
  136. DO i = startq TO endq BY 5
  137.    AddArea (i-22)*8 390-vg.i
  138.    END
  139. FreeLine
  140.  
  141. SetPalette '-1' 0 0 255
  142. NewArea
  143. DO i = startq TO endq BY 5
  144.    AddArea (i-22)*8 390-vb.i
  145.    END
  146. FreeLine
  147.  
  148. SetPalette '-1' 192 192 192
  149. NewArea
  150. DO i = startq TO endq BY 5
  151.    AddArea (i-22)*8 390-avg.i
  152.    END
  153. FreeLine
  154.  
  155.  
  156. /*
  157.  * Line graph of file sizes
  158.  */
  159. Blend 100
  160.  
  161. SetPalette '-1' 255 255 255
  162. NewArea
  163. DO i = startq TO endq BY 5
  164.    height = 380 * bytes.i / maxbytes
  165.    AddArea (i-22)*8 390-height
  166.    END
  167. FreeLine
  168.  
  169.  
  170. /*
  171.  * Graph Labels
  172.  */
  173. Blend 100
  174. LockGui
  175.  
  176. SetPalette '-1' 150 150 150
  177. DO i = startq TO endq BY 5
  178.    Text topaz.font 8 100 i
  179.    BrushHandle YOFFSET 0
  180.    Point (i-22)*8 391
  181.    END
  182.  
  183. SetPalette '-1' 255 255 0
  184. Text topaz.font 8 100 name
  185. BrushHandle 0 0
  186. Point 10 10
  187.  
  188. SetPalette '-1' 255 255 255
  189. Text topaz.font 8 100 'File Size'
  190. BrushHandle 0 0
  191. Point 30 20
  192. KillBrush
  193. Line 10 25 25 25
  194.  
  195. SetPalette '-1' 255 0 0
  196. Text topaz.font 8 100 'Red Variance'
  197. BrushHandle 0 0
  198. Point 30 30
  199. KillBrush
  200. Line 10 35 25 35
  201.  
  202. SetPalette '-1' 0 255 0
  203. Text topaz.font 8 100 'Green Variance'
  204. BrushHandle 0 0
  205. Point 30 40
  206. KillBrush
  207. Line 10 45 25 45
  208.  
  209. SetPalette '-1' 0 0 255
  210. Text topaz.font 8 100 'Blue Variance'
  211. BrushHandle 0 0
  212. Point 30 50
  213. KillBrush
  214. Line 10 55 25 55
  215.  
  216. UnlockGui
  217. Undo On ; Redraw On ; Redraw
  218.  
  219. SetPrefs SaveNails prevnails
  220. UnlockInput
  221.  
  222.  
  223. EXIT
  224.